package com.lewei.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.lewei.model.PrintInModel;
/**
 * 读取Excel05的数据(汉神骏润安全钳)
 * @author zuohaoda
 *
 */
public class ExcelSGB05 {

	/** 六位年月日 */
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");

	/** excel数据列 */
	// private static List<int[]> dataColum = new ArrayList<int[]>();
	// static {
	// // AA.AP
	// dataColum.add(new int[] { 0, 1, 11, 12, 14 });
	// // AMD
	// dataColum.add(new int[] { 0, 1, 10, 11, 13 });
	// // 35100
	// dataColum.add(new int[] { 0, 1, 9, 10, 19 });
	// // 35200
	// dataColum.add(new int[] { 0, 1, 9, 10, 19 });
	// // 35300
	// dataColum.add(new int[] { 0, 1, 8, 9, 12 });
	// // AMDDOP门机
	// dataColum.add(new int[] { 1, 4, 0, 8, 13 });
	// }

	/** 禁止实例化 */
	private ExcelSGB05() {
	};

	public static void main(String[] args) {
		File file = new File("C:\\toolsZ\\labelPrint\\modelNo\\SGB05.xlsx");
		try {
			List<PrintInModel> list = readExcel(file);
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 对外提供读取excel 的方法
	 */
	public static List<PrintInModel> readExcel(File file) throws IOException {
		String fileName = file.getName();

		String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName.substring(fileName.lastIndexOf(".") + 1);
		if ("xls".equals(extension)) {
			return read2003Excel(file);
		} else if ("xlsx".equals(extension)) {
			return read2007Excel(file);
		} else {
			throw new IOException("不支持的文件类型");
		}
	}

	/**
	 * 读取 office 2003 excel
	 * 
	 * @throws IOException
	 * @throws FileNotFoundException
	 */
	@SuppressWarnings("deprecation")
	private static List<PrintInModel> read2003Excel(File file) throws IOException {
		List<PrintInModel> list = new ArrayList<PrintInModel>();
		HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
		HSSFSheet sheet = hwb.getSheetAt(0);
		HSSFRow row = null;
		HSSFCell cell = null;
		for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
			row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			// String sheetName = sheet.getSheetName();
			PrintInModel printInfo = new PrintInModel();

			String str = "";
			// 序列号/出厂编号(Serial-NO)
			cell = row.getCell(5);
			if (cell == null) {
				continue;
			}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setSerialNo(str);
			
            //item(ElevatorNo)电梯号
			cell = row.getCell(9);
//			if (cell == null) {
//				continue;
//			}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setElevator(str);
			
			
			//VS[拼接物料号]
			cell = row.getCell(14);
//			if (cell == null) {
//				continue;
//			}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setOther(str);
			
			//type02标签样式[拼接物料号]
			cell = row.getCell(15);
//			if (cell == null) {
//				continue;
//			}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setLabelType(str);
			
			//数量
			cell = row.getCell(13);
//			if (cell == null) {
//				continue;
//			}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setQuantity(str);
			
			
			//Vmax
			cell = row.getCell(22);
//			if (cell == null) {
//			continue;
//		}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setvMax(str);
			
			//Fmax
			cell = row.getCell(23);
//			if (cell == null) {
//			continue;
//		}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setfMax(str);
			
			//A
			cell = row.getCell(24);
//			if (cell == null) {
//			continue;itemCode
//		}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setA(str);
			
			//物料号
			cell = row.getCell(17);
//			if (cell == null) {
//			continue;
//		}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setItemCode(str);
			
			if(printInfo.getItemCode().subSequence(12, 13).equals("E")){
//				
//			}
			
			 if(printInfo.getQuantity().equals("1")){
             	// 加入集合
 				list.add(printInfo);
             }else{ //数量大于1
             	int num=Integer.parseInt(printInfo.getQuantity());
             	String serialNo=printInfo.getSerialNo();
             	String serial=null;
            	String no=null;
            	String minNo=null;
            	String maxNo=null;
             	if(serialNo.contains("-")){
             		//原逻辑
//             		 serial=serialNo.substring(0,serialNo.indexOf("-"));
//             		 System.out.println("输出序列号："+serial);
//                 	 no=serialNo.substring(serialNo.indexOf("-")+1);
//                 	 minNo=no.substring(0,no.indexOf("-"));
//                 	 maxNo=no.substring(no.indexOf("-")+1);
             		
             		//20190830更改
             		minNo=serialNo.substring(0,serialNo.indexOf("-"));
             		 System.out.println("输出序列号："+serial);
             		
             	}else if(serialNo.contains("_")){
             		//原逻辑   serialNo的新格式   例： 新的：1903001006-1010  原来的：200085_348_349
//             		serial=serialNo.substring(0,serialNo.indexOf("_"));
//                	 no=serialNo.substring(serialNo.indexOf("_")+1);
//                	 minNo=no.substring(0,no.indexOf("_"));
//                	 maxNo=no.substring(no.indexOf("_")+1);
             		//20190830更改   
                	 minNo=serialNo.substring(0,serialNo.indexOf("_"));
             	}
             	Integer minNoNum=null;
             	try{
             		 minNoNum=Integer.parseInt(minNo);
             	}catch(NumberFormatException e){
             		e.getStackTrace();
             		JOptionPane.showMessageDialog(null, "出厂编号格式错误");
             		
             	}
            	
            	for(int j=0;j<num;j++){
            		PrintInModel pi = new PrintInModel();
            		int noNum=minNoNum + j;
//            		//判断小于100的输出不是99而是099(加个0)
//            		if(noNum<100){
//            			if(noNum<10){
//            				serialNo=serial+"_"+"00"+noNum;
//            			}else{
//             			serialNo=serial+"_"+"0"+noNum;
//            			}
//             		}else{
//             			serialNo=serial+"_"+noNum;
//             		}
//            		
            		serialNo=noNum+"";
            		pi.setCustomer(printInfo.getCustomer());//客户
            		pi.setSerialNo(serialNo);//序列号
                    pi.setItemCode(printInfo.getItemCode());//初始订单号
                    pi.setItemDesc(printInfo.getItemDesc());//SGB05安全钳10mm下提拉oiled GB 物料类别列
                    pi.setLabelType(printInfo.getLabelType());//GGU=1667,VKN=1 VMAX=1.65 润滑导轨、机加工导轨 安装国家：中国 EN81-20/50=N
                    pi.setA(printInfo.getA());//a
                    pi.setfMax(printInfo.getfMax());//fmax
                    pi.setvMax(printInfo.getvMax());//vmax
                    pi.setElevator(printInfo.getElevator());//电梯号
                    pi.setOrderNo(printInfo.getOrderNo());//订单号
                    pi.setOther(printInfo.getOther());//1026933A52LGS 实际交货日列
                    pi.setQuantity(printInfo.getQuantity());//数量
            		// 加入集合
    				list.add(pi);
            	}
		 }
		}
		}
		hwb.close();
		return list;
	}

	/**
	 * 读取Office 2007 excel
	 */
	@SuppressWarnings("deprecation")
	private static List<PrintInModel> read2007Excel(File file){
		try {
			List<PrintInModel> list = new ArrayList<PrintInModel>();
			// 构造 XSSFWorkbook 对象，strPath 传入文件路径
			XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
			// 读取第一章表格内容
			XSSFSheet sheet = xwb.getSheetAt(0);
			XSSFRow row = null;
			XSSFCell cell = null;
			for (int i = 1; i <= sheet.getPhysicalNumberOfRows(); i++) {
				row = sheet.getRow(i);
				if (row == null) {
					continue;
				}
				PrintInModel printInfo = new PrintInModel();

				String str = "";
				// 序列号/出厂编号(Serial-NO)
				cell = row.getCell(5);
				if (cell == null) {
					continue;
				}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setSerialNo(str);
				
	            //item(ElevatorNo)电梯号
				cell = row.getCell(9);
//				if (cell == null) {
//					continue;
//				}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setElevator(str);
				
				
				//VS[拼接物料号]
				cell = row.getCell(14);
//				if (cell == null) {
//					continue;
//				}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setOther(str);
				
				//type02标签样式[拼接物料号]
				cell = row.getCell(15);
//				if (cell == null) {
//					continue;
//				}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setLabelType(str);
				
				//数量
				cell = row.getCell(13);
//				if (cell == null) {
//					continue;
//				}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setQuantity(str);
				
				
				//Vmax
				cell = row.getCell(22);
//				if (cell == null) {
//				continue;
//			}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setvMax(str);
				
				//Fmax
				cell = row.getCell(23);
//				if (cell == null) {
//				continue;
//			}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setfMax(str);
				
				//A
				cell = row.getCell(24);
//				if (cell == null) {
//				continue;itemCode
//			}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setA(str);
				
				//物料号
				cell = row.getCell(17);
//				if (cell == null) {
//				continue;
//			}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setItemCode(str);
				String temp = (String) printInfo.getItemCode().subSequence(printInfo.getItemCode().length()-2, printInfo.getItemCode().length()-1);
				
				if(printInfo.getItemCode().subSequence(printInfo.getItemCode().length()-2, printInfo.getItemCode().length()-1).equals("E")){
				
				
                if(printInfo.getQuantity().equals("1")){
                	// 加入集合
    				list.add(printInfo);
                }else{
                	int num=Integer.parseInt(printInfo.getQuantity());
                	String serialNo=printInfo.getSerialNo();//C180725-0726
                	String serial=null;
                	String no=null;
                	String minNo=null;
                	String maxNo=null;
                	if(serialNo.contains("-")){
                 		//原逻辑
//                 		 serial=serialNo.substring(0,serialNo.indexOf("-"));
//                 		 System.out.println("输出序列号："+serial);
//                     	 no=serialNo.substring(serialNo.indexOf("-")+1);
//                     	 minNo=no.substring(0,no.indexOf("-"));
//                     	 maxNo=no.substring(no.indexOf("-")+1);
                 		
                 		//20190830更改
                 		minNo=serialNo.substring(0,serialNo.indexOf("-"));
                 		 System.out.println("输出序列号："+serial);
                 		
                 	}else if(serialNo.contains("_")){
                 		//原逻辑   serialNo的新格式   例： 新的：1903001006-1010  原来的：200085_348_349
//                 		serial=serialNo.substring(0,serialNo.indexOf("_"));
//                    	 no=serialNo.substring(serialNo.indexOf("_")+1);
//                    	 minNo=no.substring(0,no.indexOf("_"));
//                    	 maxNo=no.substring(no.indexOf("_")+1);
                 		//20190830更改   
                    	 minNo=serialNo.substring(0,serialNo.indexOf("_"));
                 	}
                 	Integer minNoNum=null;
                 	try{
                 		 minNoNum=Integer.parseInt(minNo);
                 	}catch(NumberFormatException e){
                 		e.getStackTrace();
                 		JOptionPane.showMessageDialog(null, "出厂编号格式错误");
                 		
                 	}
                	
                	for(int j=0;j<num;j++){
                		PrintInModel pi = new PrintInModel();
                		int noNum=minNoNum + j;
//                		//判断小于100的输出不是99而是099(加个0)
//                		if(noNum<100){
//                			if(noNum<10){
//                				serialNo=serial+"_"+"00"+noNum;
//                			}else{
//                 			serialNo=serial+"_"+"0"+noNum;
//                			}
//                 		}else{
//                 			serialNo=serial+"_"+noNum;
//                 		}
//                		
                		serialNo=noNum+"";
                		pi.setCustomer(printInfo.getCustomer());//客户
                		pi.setSerialNo(serialNo);//序列号
                        pi.setItemCode(printInfo.getItemCode());//初始订单号
                        pi.setItemDesc(printInfo.getItemDesc());//SGB05安全钳10mm下提拉oiled GB 物料类别列
                        pi.setLabelType(printInfo.getLabelType());//GGU=1667,VKN=1 VMAX=1.65 润滑导轨、机加工导轨 安装国家：中国 EN81-20/50=N
                        pi.setA(printInfo.getA());//a
                        pi.setfMax(printInfo.getfMax());//fmax
                        pi.setvMax(printInfo.getvMax());//vmax
                        pi.setElevator(printInfo.getElevator());//电梯号
                        pi.setOrderNo(printInfo.getOrderNo());//订单号
                        pi.setOther(printInfo.getOther());//1026933A52LGS 实际交货日列
                        pi.setQuantity(printInfo.getQuantity());//数量
                		// 加入集合
        				list.add(pi);
                	}
                }
				}/////
				
			}
			xwb.close();
			return list;
		} catch (NumberFormatException e) {
			e.printStackTrace();
			throw new RuntimeException("excel数据格式错误！");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("找不到文件！");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("找不到文件！");
		}
	}
}
